__get_time_values_from_xen();
- if ( (delta = (s64)(shadow_system_time - processed_system_time)) < 0 )
+ if ( (delta = (s64)(shadow_system_time + __get_time_delta_usecs() * 1000 -
+ processed_system_time)) < 0 )
{
printk("Timer ISR: Time went backwards: %lld\n", delta);
return;
struct timer_opts *cur_timer = &timer_none;
extern u64 shadow_system_time;
+extern u32 shadow_time_delta_usecs;
extern void __get_time_values_from_xen(void);
/* Keep track of last time we did processing/updating of jiffies and xtime. */
__get_time_values_from_xen();
- delta = (s64)(shadow_system_time - processed_system_time);
+ shadow_time_delta_usecs = cur_timer->get_offset() * NSEC_PER_USEC;
+ delta = (s64)(shadow_system_time + shadow_time_delta_usecs -
+ processed_system_time);
if (delta < 0) {
printk("Timer ISR: Time went backwards: %lld\n", delta);
goto out;
u64 shadow_system_time;
static u32 shadow_time_version;
static struct timeval shadow_tv;
+u32 shadow_time_delta_usecs;
static unsigned int rdtsc_bitshift;
extern u64 processed_system_time;
write_seqlock(&monotonic_lock);
- delta = (s64)(shadow_system_time - processed_system_time);
+ delta = (s64)(shadow_system_time + shadow_time_delta_usecs -
+ processed_system_time);
/* Process elapsed jiffies since last call. */
while (delta >= NS_PER_TICK) {